home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 005 / tss15.arc / TSSREPT.PRG < prev    next >
Encoding:
Text File  |  1986-06-25  |  26.0 KB  |  1,186 lines

  1. ****************************************************************************
  2. *
  3. * TSSREPT.PRG
  4. * Procedure file for time sheet / payroll reports
  5. * ver 1.5
  6. * Called by TSS.PRG
  7. * see comments and chg history in TSS.PRG
  8. *
  9. * mod 07/85 for clipper
  10. * mod 09/85 for floppy usage
  11. * mod 03/14/86 to change report title
  12. * mod 03/25/86 to delete monthly report summary
  13. * mod 03/26/86 to change contract report to handle proposal numbers
  14. * mod 06/25/86 changed REPT1D total routine. The old routine did not
  15. *              include the last record if it was a single key entry.
  16. *
  17. *****************************************************************************
  18. *****************************************************************************
  19. *
  20. PROCEDURE REPT
  21.  
  22. REPLY=' '
  23. CLEAR
  24. TEXT
  25. Time Sheet / Payroll Report Program
  26.  
  27. The reports should only be printed after the input data has been
  28. verified. Failure to verify the input data will result in inaccurate
  29. report data.
  30.  
  31. The reports require you to input the start date and the stop date
  32. for the pay period that will appear on the top of each report page.
  33.  
  34. The number of hours that are in the pay period should also be entered.
  35.  
  36. ENDTEXT
  37. @ 20,0 
  38. ACCEPT 'Continue with report program (Y/N) ' TO REPLY
  39. REPLY=UPPER(REPLY)
  40. IF REPLY#'Y'
  41.    RETURN
  42. ENDIF
  43. SELECT E
  44. IF .NOT. VERIFY
  45.    DO REPT0A  && not verified warning
  46.    IF REPLY#'Y'
  47.       RETURN
  48.    ENDIF
  49. ENDIF
  50.  
  51. * reports use various files, so close everything and start from scratch
  52. * to help keep track 
  53. *
  54. CLOSE DATA
  55. CLOSE INDEX
  56.  
  57. DO REPT0B  && get report parameters
  58.  
  59. START=DTOC(RP_START)
  60. STOP=DTOC(RP_STOP)
  61. HRS_PERIOD=RP_HOURS
  62.  
  63. USE  && close tssstat.dbf
  64.  
  65. * define here to behave like public
  66. *
  67. STORE 0 TO DEPT_TOT,EMPL_TOT,CNTR,CON_CNTR,DEPT_CNTR,ROW,PAGE
  68. STORE ' ' TO CON_10,CON_11,CON_12,CON_12,CON_13,CON_14,CON_15,CON_16,CON_17
  69. STORE ' ' TO CON_18,CON_19,CON_20,CON_21,CON_22,CON_23,CON_24,CON_25
  70. STORE ' ' TO CON_26,CON_27,CON_28,CON_29,CON_30,CON_31,CON_32,CON_33
  71. STORE ' ' TO CON_34,CON_35,CON_36,CON_37,CON_38,CON_39
  72. STORE ' ' TO CON_LIST,DEPT_LIST,DEPT_KEY,EMPL_KEY,CON_KEY
  73. STORE ' ' TO RA_1,RA_2,RA_3,RA_4,RA_5,RA_6,RA_7
  74. BORDER=REPLICATE('-',P_WIDTH)
  75. SELECT A
  76. SEL=' '
  77. DO WHILE SEL#'0'
  78.    CLEAR
  79.    TEXT
  80.    Time Sheet/Payroll Report Menu
  81.  
  82.  
  83.    1.  Time Sheet Report 
  84.    2.  Department Charge List
  85.    3.  Contract Charge List
  86.    4.  Employee Charge List
  87.  
  88.    0.  Return to Main Menu
  89.  
  90.    ENDTEXT
  91.    SEL=' '
  92.    @ 22,0 SAY 'Enter Selection ' GET SEL
  93.    READ
  94.    DO CASE
  95.       CASE SEL='1'
  96.            DO REPT1 
  97.       CASE SEL='2'
  98.            DO REPT2
  99.       CASE SEL='3'
  100.            DO REPT3
  101.       CASE SEL='4'
  102.            DO REPT4
  103.    ENDCASE
  104. ENDDO
  105. SEL=' '
  106. RETURN
  107. *
  108. *****************************************************************************
  109. *****************************************************************************
  110. *
  111. * not verified warning
  112. *
  113. PROCEDURE REPT0A
  114.  
  115. CLEAR
  116. TEXT
  117. Excuse me !!!!!
  118.  
  119. Did you know that the input data has not been verified ? 
  120.   
  121. You should not print out any reports until the input data has been
  122. VERIFIED.
  123.  
  124. Go directly to JAIL. 
  125.  
  126. Do not pass GO and do not collect $200. 
  127.    
  128. ENDTEXT
  129. @ 20,0 
  130. ? BELL
  131. ACCEPT 'Still continue with report program (Y/N) ' TO REPLY
  132. REPLY=UPPER(REPLY)
  133. IF REPLY#'Y'
  134.    RETURN
  135. ELSE
  136.    @ 20,0 CLEAR
  137.    @ 22,0 SAY 'OK !  You are on your own now........'
  138.    C=0
  139.    DO WHILE C<3
  140.       ?? 'snicker....    '
  141.       D=1
  142.       DO WHILE D<DELAY
  143.          D=D+1
  144.       ENDDO
  145.       C=C+1
  146.    ENDDO
  147. ENDIF
  148.  
  149. RETURN
  150. *
  151. *****************************************************************************
  152. *****************************************************************************
  153. *
  154. * get report parameters
  155. *
  156. PROCEDURE REPT0B
  157.  
  158. * display/edit current report parameters
  159. *
  160. CLEAR
  161. SELECT A
  162. USE &TSSSTAT
  163. TEXT
  164. The reports will use the following information. 
  165.  
  166. Please correct it now if it needs it.  
  167.  
  168. The new information will be stored and displayed next time.
  169.  
  170. ENDTEXT
  171. @ 18,0 SAY 'Report start date ' GET RP_START
  172. @ 19,0 SAY 'Report  stop date ' GET RP_STOP
  173. @ 20,0 SAY 'Hours per period  ' GET RP_HOURS
  174. READ
  175.  
  176. RETURN
  177. *
  178. *****************************************************************************
  179. *****************************************************************************
  180. *
  181. PROCEDURE REPT1
  182. *
  183. * Generate Time sheet report
  184. *
  185.  
  186. *       TSSINPUT.dbf  -  for input data
  187. *    TSSCONTR.dbf  -  for contract data input
  188. *    TSSDEPT .dbf  -  for dept data input
  189. * uses:    TSSF01  .dbf  -  main report data file
  190. *       TSSF01A .dbf  -  temp. file
  191. *       TSSF01B. dbf  -  temp. file
  192. *       TSSF01C. dbf  -  contract summary file
  193. *       TSSF01D. dbf  -  department summary file
  194. *
  195.  
  196. CLEAR
  197. TEXT
  198. Report 1 - Time Sheet Report
  199.  
  200. This report will :
  201.  
  202. 1.  Report the time charged to all contracts in the Report Contract List.
  203.     All contracts not in the list will be placed into direct.
  204.  
  205. 2.  All entries will be stripped of phase. All contract phases will be totaled
  206.     into one contract entry per employee per department.
  207.  
  208. 3.  Employee names will be provided based on the employee number.
  209.  
  210. 4.  A summary page is provided that displays the data in an hours by department
  211.     by contract matrix.
  212.  
  213. ENDTEXT
  214. ACCEPT 'Continue with report (Y/N)' TO REPLY
  215. REPLY=UPPER(REPLY)
  216. IF REPLY#'Y'
  217.    RETURN
  218. ENDIF
  219.  
  220. ERROR=.F.
  221.  
  222. ?
  223. ? 'REPT 1 generation started....'
  224. ?
  225.  
  226. * Generate contract list 
  227. DO REPT1A
  228.  
  229. * Generate department list
  230. DO REPT1B
  231.  
  232. IF ERROR
  233.    RETURN
  234. ENDIF
  235.  
  236. * Contract organization
  237.  DO REPT1C
  238. * total all entries for same key into one entry 
  239.  DO REPT1D
  240. * Get employee names
  241.  DO REPT1E
  242. * Generate Report Heading array for first part of report
  243. DO REPT1F
  244. * Time sheet report - part A
  245. DO REPT1G
  246. * Time sheet report - part B
  247. DO REPT1H
  248.  
  249. CLOSE DATA
  250. CLOSE INDEX
  251.  
  252. DELETE FILE &TSSF01A..DBF
  253. DELETE FILE &TSSF01B..DBF
  254. DELETE FILE &TSSF01C..DBF
  255. DELETE FILE &TSSF01D..DBF
  256. DELETE FILE &TSSF01..&NDX
  257. DELETE FILE &TSSF01A..&NDX
  258.  
  259. SELECT A
  260.  
  261. RETURN
  262. *
  263. *****************************************************************************
  264. *****************************************************************************
  265. *
  266. PROCEDURE REPT1A
  267. *
  268. * Generate contract list 
  269. *
  270. SELECT A
  271. USE &TSSRCTRL INDEX &TSSRCTRL
  272. CON_CNTR=1
  273. CON_LIST=' '
  274. DO WHILE .NOT. EOF()
  275.    CON_LIST=CON_LIST+CONTRACT+' '
  276.    CON_CNTR=CON_CNTR+1
  277.    SKIP
  278. ENDDO
  279.  
  280. MAX=INT((P_WIDTH-24)/7)
  281. IF CON_CNTR-1>MAX
  282.    CLEAR
  283.    TEXT
  284.    Hey, Dummy !!!
  285.    There are too many contracts in the report contract list.
  286.    Shorten the list or forget it !
  287.    ENDTEXT
  288.    ? 'A max of '+STR(MAX,2)+' is allowed.'
  289.    ERROR=.T.
  290.    WAIT
  291. ELSE
  292.    IF CON_CNTR<2
  293.       ? 'Contract count ERROR. ('+STR(CON_CNTR-1,1)+')'
  294.       ERROR=.T.
  295.       WAIT
  296.    ELSE
  297.       ? 'There are '+STR(CON_CNTR-1,2)+' contracts.'
  298.       CON_LIST=CON_LIST+'\TOTALS'
  299.    ENDIF
  300. ENDIF
  301. USE
  302. RETURN
  303. *
  304. *****************************************************************************
  305. *****************************************************************************
  306. *
  307. PROCEDURE REPT1B
  308. *
  309. * Generate department list
  310. * DEPT--->DEPT_LIST
  311. *
  312. USE &TSSDEPT INDEX &TSSDEPT
  313. DEPT_CNTR=1
  314. DEPT_LIST=' '
  315. DO WHILE .NOT. EOF()
  316.    DEPT_LIST=DEPT_LIST+DEPT+' '
  317.    DEPT_CNTR=DEPT_CNTR+1
  318.    SKIP
  319. ENDDO
  320.  
  321. MAX=INT((P_WIDTH-50)/10)-1
  322. * check to see if all depts will fit on paper width
  323. IF DEPT_CNTR-1>MAX
  324.    CLEAR
  325.    TEXT
  326.    Hey, Dummy !!!
  327.    There are too many departments in the Master department file.
  328.    I can't fit that many on the page width you want
  329.    Shorten the list or forget it !
  330.    ENDTEXT
  331.    ? 'A max of '+STR(MAX,2)+' is allowed.'
  332.    ERROR=.T.
  333.    WAIT
  334. ELSE  
  335.    IF DEPT_CNTR<2
  336.       ? 'Department count ERROR. ('+STR(DEPT_CNTR-1,1)+')'
  337.       ERROR=.T.
  338.       WAIT
  339.    ELSE
  340.       ? 'There are '+STR(DEPT_CNTR-1,2)+' departments.'
  341.       DEPT_LIST=DEPT_LIST+'TOTAL '
  342.    ENDIF
  343. ENDIF
  344. USE
  345. RETURN
  346. *
  347. *****************************************************************************
  348. *****************************************************************************
  349. *
  350. PROCEDURE REPT1C
  351. *
  352. * contract organization
  353. SELECT A
  354. USE &TSSF01  
  355. COPY STRU TO &TSSF01A
  356.  
  357. USE &TSSF01A
  358. APPEND FROM &TSSINPUT
  359.  
  360. REPL ALL CONTRACT WITH '\PROPOS' FOR CONTRACT='P'
  361. REPL ALL CONTRACT WITH '\DIRECT' FOR CONTRACT#'\' .AND. ;
  362.          AT(CONTRACT,CON_LIST)=0
  363.  
  364. INDEX ON DEPT+EMPL_NO+CONTRACT TO &TSSF01A
  365. GOTO TOP
  366. COPY STRU TO &TSSF01B
  367.  
  368. SELECT B
  369. USE &TSSF01
  370. ZAP
  371.  
  372. RETURN
  373. *
  374. *****************************************************************************
  375. *****************************************************************************
  376. *
  377. * total all entries for same key into one entry 
  378. *
  379. PROCEDURE REPT1D
  380.  
  381. * Entry:
  382. * SELECT A = TSSF01A INDEX TSSF01A
  383. * SELECT B = TSSF01 - ZAPPED
  384. *
  385. * Exit:
  386. * TSSF01 totaled by DEPT+EMPL_NO+CONTRACT
  387.  
  388. SELECT A   &&  USE TSSF01A INDEX TSSF01A
  389.  
  390. M_DEPT=DEPT
  391. M_EMPL=EMPL_NO
  392. M_CONT=CONTRACT
  393. M_HOURS=0
  394. GOTO TOP
  395. KEY=DEPT+EMPL_NO+CONTRACT
  396. DO WHILE .NOT. EOF()
  397.  
  398.    * accumulate while the key remains the same
  399.    *
  400.    DO WHILE DEPT+EMPL_NO+CONTRACT=KEY
  401.       M_HOURS=M_HOURS+HOURS
  402.       SKIP
  403.    ENDDO
  404.  
  405.    * key has changed, save current accumulated total into
  406.    * total file.
  407.    *
  408.    SELECT B         &&  USE TSSF01
  409.    APPEND BLANK
  410.    REPL DEPT WITH M_DEPT
  411.    REPL EMPL_NO WITH M_EMPL
  412.    REPL CONTRACT WITH M_CONT
  413.    REPL HOURS WITH M_HOURS
  414.  
  415.    * define new key and zero out accumulator
  416.    *
  417.    SELECT A
  418.    KEY=DEPT+EMPL_NO+CONTRACT
  419.    M_DEPT=DEPT
  420.    M_EMPL=EMPL_NO
  421.    M_CONT=CONTRACT
  422.    M_HOURS=0
  423. ENDDO
  424.  
  425. RETURN
  426. *
  427. *****************************************************************************
  428. *****************************************************************************
  429. *
  430. PROCEDURE REPT1E
  431. *
  432. * Get employee names
  433. *
  434. SELECT B
  435. INDEX ON EMPL_NO TO &TSSF01 
  436. SELE A
  437. USE &TSSEMPL INDEX &TSSENMBR
  438. SELE B
  439. SET RELATION TO EMPL_NO INTO A
  440. REPL ALL EMPL_NAME WITH TRIM(A->LAST_NAME)+', '+A->FIRST_NAME
  441. SET RELATION TO 
  442. INDEX ON DEPT+EMPL_NAME+CONTRACT TO &TSSF01
  443.  
  444. RETURN
  445. *
  446. *****************************************************************************
  447. *****************************************************************************
  448. *
  449. PROCEDURE REPT1F
  450. *
  451. * Generate Report Heading array for first part of report
  452. *
  453. CHAR_CNTR=1
  454. DO WHIL CHAR_CNTR<8
  455.    CNTR=1
  456.    RH_ARRAY='RA_'+STR(CHAR_CNTR,1)
  457.    &RH_ARRAY=''
  458.    DO WHIL CNTR<=CON_CNTR
  459.       CHAR=SUBS(CON_LIST,(CNTR-1)*8+CHAR_CNTR+1,1)
  460.       &RH_ARRAY=&RH_ARRAY+CHAR+'      '
  461.       CNTR=CNTR+1
  462.    ENDD
  463.    CHAR_CNTR=CHAR_CNTR+1
  464. ENDD
  465.  
  466. RETURN
  467. *
  468. *****************************************************************************
  469. *****************************************************************************
  470. *
  471. PROCEDURE REPT1G
  472. *
  473. * Time sheet report - part A
  474. *
  475. ? 'Print-out #1 started - part A'
  476.  
  477. CLOSE DATA
  478. CLOSE INDEX
  479.  
  480. *
  481. * create dept summary file
  482. *
  483. SELE C
  484. USE &TSSF01
  485. COPY STRUCT TO &TSSF01D FIELDS DEPT,CONTRACT,HOURS
  486. USE &TSSF01D
  487. *
  488. * select department file to provide dept data
  489. *
  490. SELE B
  491. USE &TSSDEPT INDEX &TSSDEPT 
  492. *
  493. * select main loop data file
  494. *
  495. SELE A
  496. USE &TSSF01 INDEX &TSSF01
  497. SET RELATION TO DEPT INTO B
  498. SET DEVICE TO PRINT
  499. IF P_WIDTH>132
  500.    ? 'Printer set to condensed mode'
  501.    @ 0,0 SAY CHR(15)
  502. ENDIF
  503. PAGE=0
  504. ROW=99
  505. GOTO TOP
  506. DO WHIL .NOT. EOF()   && main print loop
  507.    IF ROW>50
  508.       DO REPT1GT 
  509.    ENDIF
  510.    @ ROW,0 SAY '* DEPT '+DEPT+' - '+B->NAME
  511.    CNTR=0
  512.    DO WHIL CNTR+1<CON_CNTR  && zero out contract total array
  513.       CON_TOT='CON_'+STR(CNTR+10,2)
  514.       &CON_TOT=0.0
  515.       CNTR=CNTR+1
  516.    ENDD
  517.    ROW=ROW+1
  518.    DEPT_KEY=DEPT
  519.    DO WHIL DEPT=DEPT_KEY .AND. .NOT. EOF()   && do a department
  520.       IF ROW>60
  521.          DO REPT1GT 
  522.       ENDI
  523.       @ ROW,0 SAY EMPL_NO
  524.       @ ROW,5 SAY EMPL_NAME
  525.       EMPL_TOT=0.0
  526.       CNTR=0
  527.       EMPL_KEY=DEPT+EMPL_NO
  528.       DO WHIL DEPT+EMPL_NO=EMPL_KEY
  529.          CON_KEY=SUBS(CON_LIST,CNTR*8+2,7)
  530.          CON_TOT='CON_'+STR(CNTR+10,2)
  531.          IF CONTRACT=CON_KEY
  532.             @ ROW,CNTR*7+24 SAY HOURS PICT '9999.9'
  533.             EMPL_TOT=EMPL_TOT+HOURS
  534.             &CON_TOT=&CON_TOT+HOURS
  535.             SKIP
  536.             CNTR=CNTR+1
  537.          ELSE
  538.             @ ROW,CNTR*7+24 SAY '   -'
  539.             CNTR=CNTR+1
  540.          ENDI
  541.       ENDD
  542.       DO WHIL CNTR+1<CON_CNTR
  543.          @ ROW,CNTR*7+24 SAY '   -'
  544.          CNTR=CNTR+1
  545.       ENDD
  546.       @ ROW,CNTR*7+24 SAY EMPL_TOT PICT '99999.9'
  547.       ROW=ROW+1
  548.    ENDD
  549.    @ ROW,0 SAY '** DEPT TOTALS'
  550. *
  551. *  place dept totals into department summary file
  552. *
  553.    CNTR=0
  554.    DEPT_TOT=0.0
  555.    DO WHIL CNTR+1<CON_CNTR
  556.       CON_TOT='CON_'+STR(CNTR+10,2)
  557.       @ ROW,((CNTR*7))+24 SAY &CON_TOT PICT '9999.9'
  558.       SELECT C
  559.       APPEND BLANK
  560.       REPL DEPT WITH DEPT_KEY
  561.       REPL CONTRACT WITH SUBS(CON_LIST,CNTR*8+2,7)
  562.       REPL HOURS WITH &CON_TOT
  563.       SELECT A
  564.       CNTR=CNTR+1
  565.       DEPT_TOT=DEPT_TOT+&CON_TOT
  566.    ENDD
  567.    @ ROW,((CNTR*7)+24) SAY DEPT_TOT PICT '99999.9'
  568.    ROW=ROW+2
  569. ENDD
  570. RETURN
  571. *
  572. *****************************************************************************
  573. *****************************************************************************
  574. *
  575. * Time Sheet Summary report - part B
  576. *
  577. PROCEDURE REPT1H
  578.  
  579. CLOSE DATA
  580. CLOSE INDEX
  581. *
  582. * create contract summary file
  583. *
  584. SELECT C
  585. USE &TSSF01
  586. COPY STRUCT TO &TSSF01C FIELDS CONTRACT,HOURS
  587. USE &TSSF01C  
  588. *
  589. * select contract file
  590. *
  591. SELE B
  592. USE &TSSCONTR INDEX &TSSCONTR
  593. *
  594. * select dept summary file (created in part 1)
  595. *
  596. SELECT A
  597. USE &TSSF01D
  598. INDEX ON CONTRACT+DEPT TO &TSSF01
  599. GOTO TOP
  600. SET RELA TO CONTRACT INTO B
  601. *
  602. * Print report
  603. *
  604. FILLER='..............................'
  605. DO REPT1HT  
  606. *
  607. * clear out accum array
  608. *
  609. CNTR=0
  610. DO WHILE CNTR+1<DEPT_CNTR
  611.    DEPT_TOT='DEPT_'+STR(CNTR+10,2)
  612.    &DEPT_TOT=0.0
  613.    CNTR=CNTR+1
  614. ENDDO
  615. DO WHILE .NOT. EOF()
  616.    CON_NAME=TRIM(B->NAME)+FILLER
  617.    CON_NAME=SUBS(CON_NAME,1,28)
  618.    @ ROW,0 SAY CONTRACT+'  '+CON_NAME
  619.    CON_TOT=0.0
  620.    CNTR=0
  621.    CON_KEY=CONTRACT
  622.    DO WHILE CONTRACT=CON_KEY
  623.       DEPT_KEY=SUBS(DEPT_LIST,CNTR*7+2,6)
  624.       DEPT_TOT='DEPT_'+STR(CNTR+10,2)
  625.       IF DEPT=DEPT_KEY
  626.          @ ROW,CNTR*10+40 SAY HOURS PICTURE '99999.9'
  627.          CON_TOT=CON_TOT+HOURS
  628.          &DEPT_TOT=&DEPT_TOT+HOURS
  629.          SKIP
  630.          CNTR=CNTR+1
  631.       ELSE
  632.          @ ROW,CNTR*10+40 SAY '    -'
  633.          CNTR=CNTR+1
  634.       ENDIF
  635.    ENDDO
  636. *
  637. *  finish up
  638. *
  639.    DO WHILE CNTR+1<DEPT_CNTR
  640.       @ ROW,CNTR*10+40 SAY '    -'
  641.       CNTR=CNTR+1
  642.    ENDDO
  643.    @ ROW,CNTR*10+40 SAY CON_TOT PICTURE '99999.9'
  644.    @ ROW,(CNTR+1)*10+40 SAY CON_TOT/HRS_PERIOD PICTURE '9999.9'
  645.    ROW=ROW+1
  646.    SELECT C
  647.    APPEND BLANK
  648.    REPLACE CONTRACT WITH CON_KEY
  649.    REPLACE HOURS WITH CON_TOT
  650.    SELECT A
  651. ENDDO
  652. @ ROW,0 SAY 'TOTALS'
  653. CNTR=0
  654. CON_TOT=0.0
  655. DO WHILE CNTR+1<DEPT_CNTR
  656.    DEPT_TOT='DEPT_'+STR(CNTR+10,2)
  657.    @ ROW,CNTR*10+40 SAY &DEPT_TOT PICTURE '99999.9'
  658.    CNTR=CNTR+1
  659.    CON_TOT=CON_TOT+&DEPT_TOT
  660. ENDDO
  661. @ ROW,CNTR*10+40 SAY CON_TOT PICTURE '99999.9'
  662. @ ROW,(CNTR+1)*10+40 SAY CON_TOT/HRS_PERIOD PICTURE '9999.9'
  663. ROW=ROW+1
  664. @ ROW,0 SAY BORDER
  665. ROW=ROW+3
  666.  
  667. SELECT C
  668. @ ROW,0 SAY 'TOTAL HOURS        = '
  669. @ ROW,22 SAY CON_TOT PICTURE '99999.9'
  670. ROW=ROW+1
  671.  
  672. TOT_PEO=CON_TOT/HRS_PERIOD
  673. @ ROW,0 SAY 'TOTAL PEOPLE       = '
  674. @ ROW,22 SAY TOT_PEO PICTURE '99999.99'
  675. ROW=ROW+1
  676.  
  677. LOCATE FOR CONTRACT='\OVERHE'
  678. INDR_PEO=HOURS/HRS_PERIOD
  679. @ ROW,0 SAY 'INDIRECT PEOPLE    = '
  680. @ ROW,22 SAY INDR_PEO PICTURE '99999.99'
  681. ROW=ROW+1
  682.  
  683. LOCATE FOR CONTRACT='\PROPOS'
  684. PROP_PEO=HOURS/HRS_PERIOD
  685. @ ROW,0 SAY 'PROPOSAL PEOPLE    = '
  686. @ ROW,22 SAY PROP_PEO PICTURE '99999.99'
  687. ROW=ROW+1
  688.  
  689. LOCATE FOR CONTRACT='\SICK'
  690. TOT=HOURS
  691. LOCATE FOR CONTRACT='\HOLIDA'
  692. TOT=TOT+HOURS
  693. LOCATE FOR CONTRACT='\VACATI'
  694. TOT=TOT+HOURS
  695. MISC_PEO=TOT/HRS_PERIOD
  696. @ ROW,0 SAY 'SICK, HOL, VAC.    = '
  697. @ ROW,22 SAY MISC_PEO PICTURE '99999.99'
  698. ROW=ROW+1
  699.  
  700. DIR_PEO=TOT_PEO - INDR_PEO - PROP_PEO - MISC_PEO
  701. @ ROW,0 SAY 'DIRECT PEOPLE      = '
  702. @ ROW,22 SAY DIR_PEO PICTURE '99999.99'
  703. *
  704. * set printer back to normal mode
  705. IF P_WIDTH>132
  706.    @ 0,0 SAY CHR(18)
  707. ENDIF
  708. EJECT
  709. SET DEVICE TO SCREEN
  710. RETURN
  711. *
  712. *****************************************************************************
  713. *****************************************************************************
  714. *
  715. PROCEDURE REPT1GT 
  716. *
  717. * Top of page routine for report # 1 part A
  718. *
  719. PAGE=PAGE+1
  720. @ 0,0
  721. HDR=CO_NAME_1
  722. @ 1,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  723. HDR=CO_NAME_2
  724. @ 2,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  725. HDR='TIME SHEET SUMMARY'
  726. @ 3,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  727. @ 4,0 SAY 'DATE PRINTED : '+DTOC(DATE())
  728. HDR=START+' THRU '+STOP
  729. @ 4,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  730. @ 4,P_WIDTH-10 SAY 'PAGE :'+STR(PAGE,2)
  731. @ 5,0 SAY BORDER
  732. @ 6,27 SAY RA_1
  733. @ 7,27 SAY RA_2
  734. @ 8,27 SAY RA_3
  735. @ 9,27 SAY RA_4
  736. @ 10,27 SAY RA_5
  737. @ 11,27 SAY RA_6
  738. @ 12,0 SAY 'CLK#'
  739. @ 12,5 SAY 'NAME'
  740. @ 12,27 SAY RA_7
  741. @ 13,0 SAY BORDER
  742. ROW=14
  743. RETURN
  744. *
  745. *****************************************************************************
  746. *****************************************************************************
  747. *
  748. PROCEDURE REPT1HT 
  749. *
  750. * Top of page routine for report #1 part B
  751. *
  752. PAGE=PAGE+1
  753. @ 0,0
  754. HDR=CO_NAME_1
  755. @ 1,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  756. HDR=CO_NAME_2
  757. @ 2,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  758. HDR='TIME SHEET SUMMARY -- FINAL PAGE'
  759. @ 3,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  760. @ 4,0 SAY 'DATE PRINTED : '+DTOC(DATE())
  761. HDR=START+' THRU '+STOP
  762. @ 5,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
  763. @ 5,P_WIDTH-10 SAY 'PAGE :'+STR(PAGE,2)
  764. @ 6,0 SAY BORDER
  765. ROW=7
  766. CNTR=1
  767. DO WHILE CNTR<DEPT_CNTR
  768.    @ ROW,(CNTR-1)*10+40 SAY ' TOTAL'
  769.    CNTR=CNTR+1
  770. ENDDO
  771. @ ROW,(CNTR-1)*10+40 SAY ' TOTAL'
  772. ROW=ROW+1
  773. CNTR=1
  774. DO WHILE CNTR<DEPT_CNTR
  775.    @ ROW,(CNTR-1)*10+40 SAY ' DEPT.'
  776.    CNTR=CNTR+1
  777. ENDDO
  778. @ ROW,(CNTR-1)*10+40 SAY 'CONTRACT'
  779. ROW=ROW+1
  780. CNTR=1
  781. DO WHILE CNTR<DEPT_CNTR
  782.    @ ROW,(CNTR-1)*10+40 SAY SUBSTR(DEPT_LIST,(CNTR-1)*7+2,6)
  783.    CNTR=CNTR+1
  784. ENDDO
  785. ROW=ROW+2
  786. @ ROW,0 SAY 'CONTRACT NUMBER'
  787. CNTR=1
  788. DO WHILE CNTR<DEPT_CNTR
  789.    @ ROW,(CNTR-1)*10+40 SAY ' HOURS'
  790.    CNTR=CNTR+1
  791. ENDDO
  792. @ ROW,(CNTR-1)*10+40 SAY ' HOURS      EMP'
  793. ROW=ROW+1
  794. @ ROW,0 SAY BORDER
  795. ROW=ROW+1
  796. RETURN
  797. *
  798. *****************************************************************************
  799. *****************************************************************************
  800. *
  801. PROCEDURE REPT2
  802. *
  803. * Department Charge List
  804. *
  805. CLEAR
  806. TEXT
  807. Report 2 - Department Charge List
  808.  
  809. ENDTEXT
  810. ACCEPT 'Continue with report (Y/N)' TO REPLY
  811. REPLY=UPPER(REPLY)
  812. IF REPLY#'Y'
  813.    RETURN
  814. ENDIF
  815.  
  816. * contract totaling not required because report uses phase
  817. ?
  818. ? 'Generating report .....'
  819. * get employee names and generate index by dept
  820. SELECT B
  821. USE &TSSF01
  822. ZAP
  823. APPEND FROM &TSSINPUT
  824. DO REPT1E
  825. CLOSE DATA
  826. CLOSE INDEX
  827.  
  828. ? 'Report printing started....'
  829. * print report
  830. DO REPT2A
  831.  
  832. CLOSE DATA
  833. CLOSE INDEX
  834. SELECT A
  835. DELETE FILE &TSSF01..&NDX
  836. RETURN
  837. *
  838. *****************************************************************************
  839. *****************************************************************************
  840. *
  841. PROCEDURE REPT2A
  842. *
  843. * print report #2
  844. *
  845. SELECT B
  846. USE &TSSDEPT INDEX &TSSDEPT
  847. SELECT A
  848. USE &TSSF01 INDEX &TSSF01
  849. ROW=99
  850. PAGE=0
  851. SET DEVICE TO PRINT
  852. SELECT B
  853. DO WHILE .NOT. EOF()
  854.    ? DEPT
  855.    IF ROW>55  
  856.       DO REPT2T
  857.    ENDIF
  858.    @ ROW,0 SAY '* DEPT '+DEPT+' - '+NAME
  859.    ROW=ROW+2
  860.    DEPT_TOT=0
  861.    DEPT_KEY=DEPT
  862.    SELECT A
  863.    SEEK DEPT_KEY 
  864.    IF EOF()
  865.       @ ROW,10 SAY 'NO EMPLOYEES REPORTED FOR THIS DEPARTMENT'
  866.       ROW=ROW+3
  867.       @ ROW,0 SAY SUBS(BORDER,1,80)
  868.       ROW=ROW+2
  869.       SELECT B
  870.       SKIP
  871.       LOOP
  872.    ENDIF
  873.    DO WHILE DEPT=DEPT_KEY
  874.       @ ROW,10 SAY EMPL_NAME
  875.       @ ROW,40 SAY EMPL_NO
  876.       EMPL_TOT=0
  877.       EMPL_KEY=DEPT_KEY+EMPL_NO
  878.       DO WHILE DEPT+EMPL_NO = EMPL_KEY .AND. .NOT. EOF()
  879.          @ ROW,50 SAY CONTRACT
  880.          @ ROW,70 SAY HOURS PICTURE '999.9'
  881.          ROW=ROW+1
  882.          EMPL_TOT=EMPL_TOT+HOURS
  883.          IF ROW>55
  884.             DO REPT2T
  885.          ENDIF
  886.          SKIP
  887.       ENDDO
  888.       @ ROW,70 SAY '-----'
  889.       ROW=ROW+1
  890.       @ ROW,50 SAY 'TOTAL HOURS'
  891.       @ ROW,70 SAY EMPL_TOT PICTURE '999.9'
  892.       ROW=ROW+2
  893.       DEPT_TOT=DEPT_TOT+EMPL_TOT
  894.    ENDDO   
  895.    @ ROW,50 SAY 'DEPT TOTAL'
  896.    @ ROW,69 SAY DEPT_TOT PICTURE '9999.9'
  897.    ROW=ROW+1
  898.    @ ROW,0 SAY SUBS(BORDER,1,80)
  899.    ROW=ROW+2
  900.    SELECT B
  901.    SKIP
  902. ENDDO
  903. EJECT
  904. SET DEVICE TO SCREEN
  905. CLOSE DATA
  906. CLOSE INDEX
  907.  
  908. RETURN
  909. *
  910. *****************************************************************************
  911. *****************************************************************************
  912. *
  913. PROCEDURE REPT2T
  914.  
  915. PAGE=PAGE+1
  916. @ 0,0
  917. HDR=CO_NAME_1
  918. @ 1,(40-LEN(HDR)/2) SAY HDR
  919. HDR=CO_NAME_2
  920. @ 2,(40-LEN(HDR)/2) SAY HDR
  921. HDR='DEPARTMENT CHARGE LIST'
  922. @ 3,(40-LEN(HDR)/2) SAY HDR
  923. HDR=START+'  THRU   '+STOP
  924. @ 4,0 SAY 'DATE :'+DTOC(DATE())
  925. @ 4,(40-LEN(HDR)/2) SAY HDR
  926. @ 4,70 SAY 'PAGE '+STR(PAGE,3)
  927. ROW=6
  928. @ ROW,10 SAY 'EMPLOYEE NAME'
  929. @ ROW,40 SAY 'NMBR.'
  930. @ ROW,50 SAY 'CONTRACT/CHRG'
  931. @ ROW,70 SAY 'HOURS'
  932. ROW=ROW+1
  933. @ ROW,10 SAY '----------------------------'
  934. @ ROW,40 SAY '-----'
  935. @ ROW,50 SAY '-------------'
  936. @ ROW,70 SAY '-----'
  937. ROW=ROW+1
  938. RETURN
  939. *
  940. *****************************************************************************
  941. *****************************************************************************
  942. *
  943. PROCEDURE REPT3
  944. *
  945. * Contract Charge List
  946. *
  947. CLEAR
  948. TEXT
  949. Report 3 - Contract Charge List
  950.  
  951. ENDTEXT
  952. ACCEPT 'Continue with report (Y/N)' TO REPLY
  953. REPLY=UPPER(REPLY)
  954. IF REPLY#'Y'
  955.    RETURN
  956. ENDIF
  957. CLOSE DATA
  958. CLOSE INDEX
  959. BORDER3=SUBS(BORDER,1,80)
  960. ROW=99
  961. PAGE=0
  962. SET DEVICE TO PRINT
  963.  
  964. MATCH='ACF'
  965. CON_LEN=7
  966. CON_PHASE='SUBSTR(CONTRACT,CON_LEN+2)'
  967. CON_NDX='SUBS(CONTRACT,1,7)+SUBS(EMPL_NAME,1,8)+SUBS(CONTRACT,9)'
  968. DO REPT3A
  969.  
  970. MATCH='\P'
  971. CON_LEN=14  && full length of contract field
  972. CON_PHASE="' '"
  973. CON_NDX='CONTRACT+SUBS(EMPL_NAME,1,8)'
  974. DO REPT3A
  975.  
  976. EJECT
  977. SET DEVICE TO SCREEN
  978. CLOSE DATA
  979. CLOSE INDEX
  980. DELETE FILE &TSSF01..&NDX
  981. DELETE FILE &TSSF02..&NDX
  982.  
  983. RETURN
  984. *
  985. *****************************************************************************
  986. *****************************************************************************
  987. *
  988. PROCEDURE REPT3A
  989.  
  990. ?
  991. ? 'Generating Report #3A  (Contracts only)' 
  992. SELECT A
  993. USE &TSSF02
  994. ZAP
  995. APPEND FROM &TSSINPUT FOR SUBS(CONTRACT,1,1)$MATCH
  996.  
  997. * get employee names
  998. *
  999. SELECT B
  1000. USE &TSSEMPL INDEX &TSSENMBR
  1001.  
  1002. SELECT A
  1003. SET RELATION TO EMPL_NO INTO B
  1004. REPLACE ALL EMPL_NAME WITH TRIM(B->LAST_NAME)+', '+B->FIRST_NAME
  1005. SET RELATION TO
  1006. INDEX ON &CON_NDX TO &TSSF02
  1007. SELECT B
  1008. USE &TSSCONTR INDEX &TSSCONTR
  1009. SELECT A
  1010. ? 'Report printout started.....'
  1011. SET RELATION TO SUBSTR(CONTRACT,1,CON_LEN) INTO B
  1012. CON_HDR=' '
  1013. GOTO TOP
  1014. DO WHILE .NOT. EOF()
  1015.    CON_HDR=SUBS(CONTRACT,1,CON_LEN)+' -  '+TRIM(B->NAME)+' : '+TRIM(B->HEAD)
  1016.    IF ROW>50
  1017.       DO REPT3T 
  1018.    ELSE
  1019.       @ ROW,0 SAY CON_HDR
  1020.       ROW=ROW+2
  1021.    ENDIF
  1022.    CON_TOT=0
  1023.    CON_KEY=SUBS(CONTRACT,1,CON_LEN)
  1024.    DO WHILE .T.   && CONTRACT=CON_KEY
  1025.       @ ROW,10 SAY EMPL_NAME
  1026.       @ ROW,40 SAY EMPL_NO
  1027.       EMPL_KEY=SUBS(CONTRACT,1,CON_LEN)+EMPL_NO
  1028.       DO WHILE SUBS(CONTRACT,1,CON_LEN)+EMPL_NO=EMPL_KEY
  1029.          @ ROW,50 SAY &CON_PHASE
  1030.          @ ROW,70 SAY HOURS PICTURE '999.9'
  1031.          ROW=ROW+1
  1032.          CON_TOT=CON_TOT+HOURS
  1033.          SKIP
  1034.       ENDDO
  1035.       IF SUBS(CONTRACT,1,CON_LEN) # CON_KEY
  1036.          @ ROW,60 SAY 'TOTAL'
  1037.          @ ROW,69 SAY CON_TOT PICTURE '9999.9'
  1038.          ROW=ROW+1
  1039.          @ ROW,0 SAY BORDER3
  1040.          ROW=ROW+2
  1041.          EXIT
  1042.       ELSE 
  1043.          IF ROW>54
  1044.             DO REPT3T
  1045.          ENDIF
  1046.       ENDIF
  1047.    ENDDO   
  1048. ENDDO
  1049.  
  1050. RETURN
  1051. *
  1052. *****************************************************************************
  1053. *****************************************************************************
  1054. *
  1055. PROCEDURE REPT3T
  1056. PAGE=PAGE+1
  1057. @ 0,0
  1058. HDR=CO_NAME_1
  1059. @ 1,(40-LEN(HDR)/2) SAY HDR
  1060. HDR=CO_NAME_2
  1061. @ 2,(40-LEN(HDR)/2) SAY HDR
  1062. HDR='CONTRACT CHARGE LIST'
  1063. @ 3,(40-LEN(HDR)/2) SAY HDR
  1064. @ 4,0 SAY 'DATE :'+DTOC(DATE())
  1065. HDR=START+'  THRU  '+STOP
  1066. @ 4,40-LEN(HDR)/2 SAY HDR
  1067. @ 4,70 SAY 'PAGE '+STR(PAGE,3)
  1068. @ 6,10 SAY 'EMPLOYEE NAME'
  1069. @ 6,40 SAY 'NMBR.'
  1070. @ 6,50 SAY 'PHASE'
  1071. @ 6,70 SAY 'HOURS'
  1072. @ 7,0 SAY BORDER3
  1073. @ 8,0 SAY CON_HDR
  1074. ROW=9
  1075. RETURN
  1076. *
  1077. *****************************************************************************
  1078. *****************************************************************************
  1079. *
  1080. PROCEDURE REPT4
  1081. *
  1082. * Employee Charge List
  1083. *
  1084.  
  1085. CLEAR
  1086. TEXT
  1087. Report 4 - Employee Charge List
  1088.  
  1089. ENDTEXT
  1090. ACCEPT 'Continue with report (Y/N)' TO REPLY
  1091. REPLY=UPPER(REPLY)
  1092. IF REPLY#'Y'
  1093.    RETURN
  1094. ENDIF
  1095. ?
  1096. ? 'Generating Report #4...' 
  1097. SELECT B
  1098. USE &TSSF02
  1099. ZAP
  1100. APPEND FROM &TSSINPUT
  1101.  
  1102. * get employee names
  1103. DO REPT1E
  1104.  
  1105. CLOSE DATA
  1106. CLOSE INDEX
  1107.  
  1108. SELECT A
  1109. USE &TSSF02
  1110. INDEX ON SUBS(EMPL_NAME,1,16)+DEPT+CONTRACT TO &TSSF02
  1111.  
  1112. ? 'Report printout started.....'
  1113.  
  1114. ROW=99
  1115. PAGE=0
  1116. SET DEVICE TO PRINT
  1117. SELECT A
  1118. GOTO TOP
  1119. DO WHILE .NOT. EOF()
  1120.    IF ROW>55
  1121.       DO REPT4T 
  1122.    ENDIF
  1123.    @ ROW,0 SAY EMPL_NAME
  1124.    @ ROW,30 SAY EMPL_NO
  1125.    EMPL_TOT=0
  1126.    EMPL_KEY=EMPL_NAME
  1127.    DO WHILE EMPL_NAME = EMPL_KEY .AND. .NOT. EOF()
  1128.       @ ROW,40 SAY DEPT
  1129.       @ ROW,50 SAY CONTRACT
  1130.       @ ROW,70 SAY HOURS PICTURE '999.9'
  1131.       EMPL_TOT=EMPL_TOT+HOURS
  1132.       ROW=ROW+1
  1133.       IF ROW>55
  1134.          DO REPT4T
  1135.       ENDIF
  1136.       SKIP
  1137.    ENDDO   
  1138.    @ ROW,60 SAY 'TOTAL'
  1139.    @ ROW,69 SAY EMPL_TOT PICTURE '9999.9'
  1140.    ROW=ROW+1
  1141.    @ ROW,0 SAY SUBS(BORDER,1,80)
  1142.    ROW=ROW+2
  1143. ENDDO
  1144. EJECT
  1145.  
  1146. SET DEVICE TO SCREEN
  1147. CLOSE DATA
  1148. CLOSE INDEX
  1149. DELETE FILE &TSSF01..&NDX
  1150. DELETE FILE &TSSF02..&NDX
  1151. RETURN
  1152. *
  1153. *****************************************************************************
  1154. *****************************************************************************
  1155. *
  1156. PROCEDURE REPT4T
  1157. PAGE=PAGE+1
  1158. @ 0,0
  1159. HDR=CO_NAME_1
  1160. @ 1,(40-LEN(HDR)/2) SAY HDR
  1161. HDR=CO_NAME_2
  1162. @ 2,(40-LEN(HDR)/2) SAY HDR
  1163. HDR='EMPLOYEE CHARGE LIST'
  1164. @ 3,(40-LEN(HDR)/2) SAY HDR
  1165. @ 4,0 SAY 'DATE :'+DTOC(DATE())
  1166. HDR=START+'  THRU  '+STOP
  1167. @ 4,40-LEN(HDR)/2 SAY HDR
  1168. @ 4,70 SAY 'PAGE '+STR(PAGE,3)
  1169. @ 6,10 SAY 'EMPLOYEE NAME'
  1170. @ 6,30 SAY 'NMBR.'
  1171. @ 6,40 SAY 'DEPT.'
  1172. @ 6,50 SAY 'CONTRACT'
  1173. @ 6,70 SAY 'HOURS'
  1174. @ 7,0 SAY SUBS(BORDER,1,80)
  1175. ROW=8
  1176. RETURN
  1177. *
  1178. *****************************************************************************
  1179. *****************************************************************************
  1180. *
  1181. * END OF PROCEDURE FILE - TSSREPT.PRG
  1182. *
  1183. *****************************************************************************
  1184.